home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume9 / draw_jt / part01 next >
Encoding:
Text File  |  1989-12-12  |  54.5 KB  |  1,719 lines

  1. Newsgroups: comp.sources.misc
  2. From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  3. Subject: v09i061: draw, part 01/02
  4. Reply-To: jta@sah.vtt.fi (Juha Takala)
  5.  
  6. Posting-number: Volume 9, Issue 61
  7. Submitted-by: jta@sah.vtt.fi (Juha Takala)
  8. Archive-name: draw_jt/part01
  9.  
  10. [This is "dr_lib", a library to produce plots in various formats including
  11. plot(3) and HPGL formats, and "draw", a simple front-end for the library.
  12. See the README for more information.  ++bsa]
  13.  
  14. #! /bin/sh
  15. # This is a shell archive.  Remove anything before this line, then unpack
  16. # it by saving it into a file and typing "sh file".  To overwrite existing
  17. # files, type "sh file -c".  You can also feed this as standard input via
  18. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  19. # will see the following message at the end:
  20. #        "End of archive 1 (of 2)."
  21. # Contents:  License MANIFEST Makefile README dr_lib.h draw.1 getopt.c
  22. #   getopt.l3 kiero.c koe koe.dat makefile.dos vttlogo
  23. # Wrapped by allbery@uunet on Tue Dec 12 21:15:56 1989
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test -f 'License' -a "${1}" != "-c" ; then 
  26.   echo shar: Will not clobber existing file \"'License'\"
  27. else
  28. echo shar: Extracting \"'License'\" \(14173 characters\)
  29. sed "s/^X//" >'License' <<'END_OF_FILE'
  30. X
  31. XCopyright (C) 1988, 1989 by Juha Takala, jta@sah.vtt.fi
  32. X
  33. X$Id: License,v 1.1 89/12/08 14:00:46 jta Exp Locker: jta $
  34. X
  35. XI want this program to be free; that's why I say:
  36. X
  37. X     This program is free software; you can redistribute it and/or modify
  38. X     it under the terms of the GNU General Public License as published by
  39. X     the Free Software Foundation; version 1.
  40. X
  41. X     This program is distributed in the hope that it will be useful,
  42. X     but WITHOUT ANY WARRANTY; without even the implied warranty of
  43. X     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  44. X     GNU General Public License for more details.
  45. X
  46. X     You should have received a copy of the GNU General Public License
  47. X     along with this program; if not, write to the Free Software
  48. X     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  49. X
  50. XThe GNU General Public License follows (taken directly from GNU Emacs info).
  51. X
  52. X=====================Start of GNU General Public License ================
  53. X
  54. XGNU GENERAL PUBLIC LICENSE
  55. X**************************
  56. X                          Version 1, February 1989
  57. X
  58. X     Copyright (C) 1989 Free Software Foundation, Inc.
  59. X     675 Mass Ave, Cambridge, MA 02139, USA
  60. X
  61. X     Everyone is permitted to copy and distribute verbatim copies
  62. X     of this license document, but changing it is not allowed.
  63. X
  64. X
  65. XPreamble
  66. X========
  67. X
  68. X  The license agreements of most software companies try to keep users
  69. Xat the mercy of those companies.  By contrast, our General Public
  70. XLicense is intended to guarantee your freedom to share and change free
  71. Xsoftware---to make sure the software is free for all its users.  The
  72. XGeneral Public License applies to the Free Software Foundation's
  73. Xsoftware and to any other program whose authors commit to using it.
  74. XYou can use it for your programs, too.
  75. X
  76. X  When we speak of free software, we are referring to freedom, not
  77. Xprice.  Specifically, the General Public License is designed to make
  78. Xsure that you have the freedom to give away or sell copies of free
  79. Xsoftware, that you receive source code or can get it if you want it,
  80. Xthat you can change the software or use pieces of it in new free
  81. Xprograms; and that you know you can do these things.
  82. X
  83. X  To protect your rights, we need to make restrictions that forbid
  84. Xanyone to deny you these rights or to ask you to surrender the rights.
  85. XThese restrictions translate to certain responsibilities for you if you
  86. Xdistribute copies of the software, or if you modify it.
  87. X
  88. X  For example, if you distribute copies of a such a program, whether
  89. Xgratis or for a fee, you must give the recipients all the rights that
  90. Xyou have.  You must make sure that they, too, receive or can get the
  91. Xsource code.  And you must tell them their rights.
  92. X
  93. X  We protect your rights with two steps: (1) copyright the software, and
  94. X(2) offer you this license which gives you legal permission to copy,
  95. Xdistribute and/or modify the software.
  96. X
  97. X  Also, for each author's protection and ours, we want to make certain
  98. Xthat everyone understands that there is no warranty for this free
  99. Xsoftware.  If the software is modified by someone else and passed on, we
  100. Xwant its recipients to know that what they have is not the original, so
  101. Xthat any problems introduced by others will not reflect on the original
  102. Xauthors' reputations.
  103. X
  104. X  The precise terms and conditions for copying, distribution and
  105. Xmodification follow.
  106. X
  107. X                            TERMS AND CONDITIONS
  108. X
  109. X  1. This License Agreement applies to any program or other work which
  110. X     contains a notice placed by the copyright holder saying it may be
  111. X     distributed under the terms of this General Public License.  The
  112. X     "Program", below, refers to any such program or work, and a "work based
  113. X     on the Program" means either the Program or any work containing the
  114. X     Program or a portion of it, either verbatim or with modifications.  Each
  115. X     licensee is addressed as "you".
  116. X
  117. X  2. You may copy and distribute verbatim copies of the Program's source
  118. X     code as you receive it, in any medium, provided that you conspicuously and
  119. X     appropriately publish on each copy an appropriate copyright notice and
  120. X     disclaimer of warranty; keep intact all the notices that refer to this
  121. X     General Public License and to the absence of any warranty; and give any
  122. X     other recipients of the Program a copy of this General Public License
  123. X     along with the Program.  You may charge a fee for the physical act of
  124. X     transferring a copy.
  125. X
  126. X  3. You may modify your copy or copies of the Program or any portion of
  127. X     it, and copy and distribute such modifications under the terms of Paragraph
  128. X     1 above, provided that you also do the following:
  129. X
  130. X        * cause the modified files to carry prominent notices stating that
  131. X          you changed the files and the date of any change; and
  132. X
  133. X        * cause the whole of any work that you distribute or publish, that
  134. X          in whole or in part contains the Program or any part thereof, either
  135. X          with or without modifications, to be licensed at no charge to all
  136. X          third parties under the terms of this General Public License (except
  137. X          that you may choose to grant warranty protection to some or all
  138. X          third parties, at your option).
  139. X
  140. X        * If the modified program normally reads commands interactively when
  141. X          run, you must cause it, when started running for such interactive use
  142. X          in the simplest and most usual way, to print or display an
  143. X          announcement including an appropriate copyright notice and a notice
  144. X          that there is no warranty (or else, saying that you provide a
  145. X          warranty) and that users may redistribute the program under these
  146. X          conditions, and telling the user how to view a copy of this General
  147. X          Public License.
  148. X
  149. X        * You may charge a fee for the physical act of transferring a
  150. X          copy, and you may at your option offer warranty protection in
  151. X          exchange for a fee.
  152. X
  153. X     Mere aggregation of another independent work with the Program (or its
  154. X     derivative) on a volume of a storage or distribution medium does not bring
  155. X     the other work under the scope of these terms.
  156. X
  157. X  4. You may copy and distribute the Program (or a portion or derivative of
  158. X     it, under Paragraph 2) in object code or executable form under the terms of
  159. X     Paragraphs 1 and 2 above provided that you also do one of the following:
  160. X
  161. X        * accompany it with the complete corresponding machine-readable
  162. X          source code, which must be distributed under the terms of
  163. X          Paragraphs 1 and 2 above; or,
  164. X
  165. X        * accompany it with a written offer, valid for at least three
  166. X          years, to give any third party free (except for a nominal charge
  167. X          for the cost of distribution) a complete machine-readable copy of the
  168. X          corresponding source code, to be distributed under the terms of
  169. X          Paragraphs 1 and 2 above; or,
  170. X
  171. X        * accompany it with the information you received as to where the
  172. X          corresponding source code may be obtained.  (This alternative is
  173. X          allowed only for noncommercial distribution and only if you
  174. X          received the program in object code or executable form alone.)
  175. X
  176. X     Source code for a work means the preferred form of the work for making
  177. X     modifications to it.  For an executable file, complete source code means
  178. X     all the source code for all modules it contains; but, as a special
  179. X     exception, it need not include source code for modules which are standard
  180. X     libraries that accompany the operating system on which the executable
  181. X     file runs, or for standard header files or definitions files that
  182. X     accompany that operating system.
  183. X
  184. X  5. You may not copy, modify, sublicense, distribute or transfer the
  185. X     Program except as expressly provided under this General Public License.
  186. X     Any attempt otherwise to copy, modify, sublicense, distribute or transfer
  187. X     the Program is void, and will automatically terminate your rights to use
  188. X     the Program under this License.  However, parties who have received
  189. X     copies, or rights to use copies, from you under this General Public
  190. X     License will not have their licenses terminated so long as such parties
  191. X     remain in full compliance.
  192. X
  193. X  6. By copying, distributing or modifying the Program (or any work based
  194. X     on the Program) you indicate your acceptance of this license to do so,
  195. X     and all its terms and conditions.
  196. X
  197. X  7. Each time you redistribute the Program (or any work based on the
  198. X     Program), the recipient automatically receives a license from the original
  199. X     licensor to copy, distribute or modify the Program subject to these
  200. X     terms and conditions.  You may not impose any further restrictions on the
  201. X     recipients' exercise of the rights granted herein.
  202. X
  203. X  8. The Free Software Foundation may publish revised and/or new versions
  204. X     of the General Public License from time to time.  Such new versions will
  205. X     be similar in spirit to the present version, but may differ in detail to
  206. X     address new problems or concerns.
  207. X
  208. X     Each version is given a distinguishing version number.  If the Program
  209. X     specifies a version number of the license which applies to it and "any
  210. X     later version", you have the option of following the terms and conditions
  211. X     either of that version or of any later version published by the Free
  212. X     Software Foundation.  If the Program does not specify a version number of
  213. X     the license, you may choose any version ever published by the Free Software
  214. X     Foundation.
  215. X
  216. X  9. If you wish to incorporate parts of the Program into other free
  217. X     programs whose distribution conditions are different, write to the author
  218. X     to ask for permission.  For software which is copyrighted by the Free
  219. X     Software Foundation, write to the Free Software Foundation; we sometimes
  220. X     make exceptions for this.  Our decision will be guided by the two goals
  221. X     of preserving the free status of all derivatives of our free software and
  222. X     of promoting the sharing and reuse of software generally.
  223. X
  224. X                                   NO WARRANTY
  225. X
  226. X 10. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  227. X     FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
  228. X     OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  229. X     PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
  230. X     OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  231. X     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
  232. X     TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  233. X     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
  234. X     REPAIR OR CORRECTION.
  235. X
  236. X 11. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
  237. X     ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  238. X     REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
  239. X     INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
  240. X     ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
  241. X     LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
  242. X     SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
  243. X     WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
  244. X     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  245. X
  246. X                        END OF TERMS AND CONDITIONS
  247. X
  248. X
  249. XAppendix: How to Apply These Terms to Your New Programs
  250. X=======================================================
  251. X
  252. X  If you develop a new program, and you want it to be of the greatest
  253. Xpossible use to humanity, the best way to achieve this is to make it
  254. Xfree software which everyone can redistribute and change under these
  255. Xterms.
  256. X
  257. X  To do so, attach the following notices to the program.  It is safest to
  258. Xattach them to the start of each source file to most effectively convey
  259. Xthe exclusion of warranty; and each file should have at least the
  260. X"copyright" line and a pointer to where the full notice is found.
  261. X
  262. X     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
  263. X     Copyright (C) 19YY  NAME OF AUTHOR
  264. X
  265. X     This program is free software; you can redistribute it and/or modify
  266. X     it under the terms of the GNU General Public License as published by
  267. X     the Free Software Foundation; either version 1, or (at your option)
  268. X     any later version.
  269. X
  270. X     This program is distributed in the hope that it will be useful,
  271. X     but WITHOUT ANY WARRANTY; without even the implied warranty of
  272. X     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  273. X     GNU General Public License for more details.
  274. X
  275. X     You should have received a copy of the GNU General Public License
  276. X     along with this program; if not, write to the Free Software
  277. X     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  278. X
  279. XAlso add information on how to contact you by electronic and paper mail.
  280. X
  281. XIf the program is interactive, make it output a short notice like this
  282. Xwhen it starts in an interactive mode:
  283. X
  284. X     Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
  285. X     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
  286. X     This is free software, and you are welcome to redistribute it
  287. X     under certain conditions; type `show c' for details.
  288. X
  289. XThe hypothetical commands `show w' and `show c' should show the
  290. Xappropriate parts of the General Public License.  Of course, the
  291. Xcommands you use may be called something other than `show w' and `show
  292. Xc'; they could even be mouse-clicks or menu items---whatever suits your
  293. Xprogram.
  294. X
  295. XYou should also get your employer (if you work as a programmer) or your
  296. Xschool, if any, to sign a "copyright disclaimer" for the program, if
  297. Xnecessary.  Here a sample; alter the names:
  298. X
  299. X     Yoyodyne, Inc., hereby disclaims all copyright interest in the
  300. X     program `Gnomovision' (a program to direct compilers to make passes
  301. X     at assemblers) written by James Hacker.
  302. X
  303. X     SIGNATURE OF TY COON, 1 April 1989
  304. X     Ty Coon, President of Vice
  305. X
  306. XThat's all there is to it!
  307. X
  308. X====================== End of GNU General Public License ================
  309. END_OF_FILE
  310. if test 14173 -ne `wc -c <'License'`; then
  311.     echo shar: \"'License'\" unpacked with wrong size!
  312. fi
  313. # end of 'License'
  314. fi
  315. if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  316.   echo shar: Will not clobber existing file \"'MANIFEST'\"
  317. else
  318. echo shar: Extracting \"'MANIFEST'\" \(561 characters\)
  319. sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
  320. X   File Name        Archive #    Description
  321. X-----------------------------------------------------------
  322. X License                    1    
  323. X MANIFEST                   1    
  324. X Makefile                   1    
  325. X README                     1    
  326. X dr_lib.c                   2    
  327. X dr_lib.h                   1    
  328. X draw.1                     1    
  329. X draw.c                     2    
  330. X getopt.c                   1    
  331. X getopt.l3                  1    
  332. X kiero.c                    1    
  333. X koe                        1    
  334. X koe.dat                    1    
  335. X makefile.dos               1    
  336. X vttlogo                    1    
  337. END_OF_FILE
  338. if test 561 -ne `wc -c <'MANIFEST'`; then
  339.     echo shar: \"'MANIFEST'\" unpacked with wrong size!
  340. fi
  341. # end of 'MANIFEST'
  342. fi
  343. if test -f 'Makefile' -a "${1}" != "-c" ; then 
  344.   echo shar: Will not clobber existing file \"'Makefile'\"
  345. else
  346. echo shar: Extracting \"'Makefile'\" \(2766 characters\)
  347. sed "s/^X//" >'Makefile' <<'END_OF_FILE'
  348. X#
  349. X#    Makefile for draw
  350. X#    Copyright (C) 1988, 1989 by Juha Takala
  351. X#    jta@sah.vtt.fi
  352. X
  353. X# This program is free software; you can redistribute it and/or modify
  354. X# it under the terms of the GNU General Public License as published by
  355. X# the Free Software Foundation; version 1.
  356. X
  357. X# This program is distributed in the hope that it will be useful,
  358. X# but WITHOUT ANY WARRANTY; without even the implied warranty of
  359. X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  360. X# the file "License" for more details.
  361. X
  362. X# You should have received a copy of the GNU General Public License
  363. X# along with this program; if not, write to the Free Software
  364. X# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  365. X
  366. X# Send bug reports and suggestions to:
  367. X#    jta@sah.vtt.fi
  368. X#
  369. X# $Id: Makefile,v 2.7 89/12/11 09:24:39 jta Exp $
  370. X#
  371. X
  372. XSRCS    = dr_lib.h dr_lib.c draw.c
  373. XDOCS    = README draw.1 License
  374. XMAKES    = Makefile makefile.dos
  375. XOTHERS    = koe koe.dat vttlogo kiero.c 
  376. XGETOPTSRC = getopt.c getopt.l3
  377. XKIT    = $(DOCS) $(SRCS) $(MAKES) $(OTHERS) $(GETOPTSRC)
  378. X
  379. X########## BEGINning of configuration section #############
  380. X
  381. XCC = cc
  382. X
  383. X# Choose one.  UNIX (SysV) and MSDOS are tested, BSD should be easy, and VMS
  384. X# has also been done a long time and many versions ago
  385. XOS = -DUNIX
  386. X#OS = -DMSDOS
  387. X#OS = -DVMS
  388. X
  389. X# SYSV shared libraries work in my system!  Take it or leave it.
  390. XLIBSH    = -lc_s
  391. X
  392. X# Choose of these; gcc allows both:
  393. X#DEBUG = -g
  394. XDEBUG = -O
  395. X
  396. X# Do define this if you want *NIX plot(3) interface calls
  397. XPLOT = -DPLOT
  398. X
  399. X# Do define this if you want LIBGL.  It is a library that will handle ega
  400. X# etc.  Look for its docs.  
  401. XGL_LIB = -DGL_LIB
  402. X
  403. X# Where to find gl_plot() funtions.  If you didn't define GL_LIB,
  404. X# you don't need this, either
  405. XLIBGL    = ../gl_plot/gl.a
  406. X
  407. X# Standard *NIX plot(3) library spec.  This might also be -l4014 for
  408. X# direct tek4014 output.  See plot(3).
  409. XLIBPLOT = -lplot
  410. X
  411. X# If you don't have getopt library, use this.  This is the one that has been
  412. X# posted into netland long ago.  I guess MS-DOSsers need this.
  413. X# GETOPT = getopt.o
  414. X
  415. XCI = ci
  416. XCO = co
  417. XSHAR = makekit -s10k
  418. XTAR = gtar -zcf draw.zar
  419. X
  420. X################## END of configuration section ###################
  421. X
  422. XCFLAGS    = $(DEBUG) $(GL_LIB) $(OS) $(PLOT)
  423. X
  424. X# Collection of libraries to give ld
  425. XLIBS    = $(LIBGL) $(LIBPLOT) $(LIBSH) -lm
  426. X
  427. XOBJS    = draw.o dr_lib.o $(GETOPT)
  428. X
  429. Xdraw:    $(OBJS) $(LIBGL)
  430. X    cc $(CFLAGS) -o $@ $(OBJS) $(LIBS)
  431. X
  432. X$(OBJS): dr_lib.h
  433. X
  434. Xdemo:    kiero draw
  435. X#    kiero | ./draw -tplot | tplot -T4014
  436. X# maybe it is better to leave the fun to be done by hand...
  437. X
  438. X# the name is finnish and means 'screwed'
  439. Xkiero:    kiero.c
  440. X    cc -o kiero kiero.c -lm $(LIBSH)
  441. X
  442. Xci:    ;        for i in $(KIT); do $(CI) $$i </dev/null; done
  443. Xco:    ;        for i in $(KIT); do $(CO) $$i; done
  444. X
  445. Xkit:    $(KIT);        $(SHAR) $(KIT)
  446. Xzar:    $(KIT);        $(TAR) $(KIT)
  447. Xlint:    ;        lint $(CFLAGS) $(SRCS)
  448. END_OF_FILE
  449. if test 2766 -ne `wc -c <'Makefile'`; then
  450.     echo shar: \"'Makefile'\" unpacked with wrong size!
  451. fi
  452. # end of 'Makefile'
  453. fi
  454. if test -f 'README' -a "${1}" != "-c" ; then 
  455.   echo shar: Will not clobber existing file \"'README'\"
  456. else
  457. echo shar: Extracting \"'README'\" \(3603 characters\)
  458. sed "s/^X//" >'README' <<'END_OF_FILE'
  459. X$Id: README,v 2.3 89/12/11 09:25:07 jta Exp $
  460. X
  461. X     This program is free software; you can redistribute it and/or modify
  462. X     it under the terms of the GNU General Public License as published by
  463. X     the Free Software Foundation; either version 1, or any later version.
  464. X
  465. X     This program is distributed in the hope that it will be useful,
  466. X     but WITHOUT ANY WARRANTY; without even the implied warranty of
  467. X     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  468. X     file "License" for more details.
  469. X
  470. X     You should have received a copy of the GNU General Public License
  471. X     along with this program; if not, write to the Free Software
  472. X     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  473. X
  474. XWhat we have here
  475. X*****************
  476. X
  477. Xdr_lib.c :
  478. X----------
  479. X
  480. Xdr_lib.c is a collection of simple device level graphics drawing
  481. Xsubroutines.  dr_lib.c has several output choises: it will produce HPGL
  482. Xdirectly, produce plot(3) code, and use gl_plot(3) library to support EGA,
  483. XCGA, HERCULES, IBM graphics printer, Laserjet, etc.  gl_plot was posted in
  484. Xcomp.sources.unix some time ago, and it is made by umix!m-net!dtlewis!lewis,
  485. Xthe rest is made by me.  There is a compile time scwith (see Makefile) to
  486. Xinclude code generation for gl_plot().  If you want to include gl_plot()
  487. Xcode, make sure your gl_plot() library works in your system.
  488. X
  489. XI once made a quick port of gl_lib to 386 UNIX (Enix), but I have no longer
  490. Xacces to that system.  My current system is Interactive SVr3.2, and it was
  491. Xnot so easy to port gl_lib here.  I also have X now, and that has Tektronix
  492. Xemulation.   That is why I implemented the standard *NIX plot(3) library
  493. Xinterface into dr_lib.c (*NIX has also tplot(1)), so this is my current
  494. Xmethod to get plots onto screen.
  495. X
  496. X
  497. Xdraw.c :
  498. X--------
  499. X
  500. Xdraw.c is intended to be a "front-end" for dr_lib routines.  draw.c makes
  501. Xuse of line and text drawing and pen movement routines to build x-y pictures
  502. Xwith axes, labels, text etc.  Nothing will prevent you from making your own
  503. Xmain program to call directly functions in dr_lib.c, if you like.  Real
  504. X[nt]roff-able man page is also included in this kit (draw.1), hope it is up
  505. Xto date.
  506. X
  507. X
  508. Xkiero.c :
  509. X---------
  510. X
  511. Xkiero.c is a fancy demo program that will produce data into its stdout, to
  512. Xbe processed further by draw.  It will also put enough definitions, so that
  513. Xyou can pipe its stdout directly to draw.
  514. X
  515. X
  516. XCompiling and Installing :
  517. X--------------------------
  518. X
  519. X1) Edit the Makefile to suit your system.  Then say 'make'.  This version of
  520. X   draw is developed under Interactive 386/ix SysV 3.2.  draw was born veery
  521. X   looong time ago started under BSD 4.x, has also been compiled under
  522. X   MosseDos (MSC x), and even VMS.  Porting to these systems should be quite
  523. X   easy, send the diffs to me if there is something special.
  524. X
  525. X2) draw will use enviroment variable DRAWDEV to decide what kind of device
  526. X   it should work for.  Default value is `ega' for gl_plot() subroutine
  527. X   package.  That, again will use GLMODE to choose between EGA, CGA, VGA
  528. X   etc.  I have:
  529. X    DRAWDEV=plot;    export DRAWDEV    # my default is to pipe to tplot(1)
  530. X    GLMODE=256;    export GLMODE    # but specifying -tega, I get it to
  531. X                    # my Epson FX-80...
  532. X    PLOTDEV=lp;    export PLOTDEV    # ... which is /dev/lp
  533. X   in my .profile 
  534. X
  535. X
  536. X
  537. XTo do :
  538. X-------
  539. X
  540. X- Real support for X.
  541. X
  542. X- Suggestions ?
  543. X
  544. X
  545. X   I would like to hear a) experiences in porting this package into
  546. X   different systems, b) bugs & new features, so that I can fix and
  547. X   include them in next version, if it ever will be made.
  548. X
  549. X    jta@sah.vtt.fi    voice: +358 0 4566425
  550. X
  551. X    Juha Takala
  552. X    VTT/SAH
  553. X    PL 34
  554. X    02151 Espoo
  555. X    Finland
  556. X
  557. X
  558. END_OF_FILE
  559. if test 3603 -ne `wc -c <'README'`; then
  560.     echo shar: \"'README'\" unpacked with wrong size!
  561. fi
  562. # end of 'README'
  563. fi
  564. if test -f 'dr_lib.h' -a "${1}" != "-c" ; then 
  565.   echo shar: Will not clobber existing file \"'dr_lib.h'\"
  566. else
  567. echo shar: Extracting \"'dr_lib.h'\" \(4029 characters\)
  568. sed "s/^X//" >'dr_lib.h' <<'END_OF_FILE'
  569. X/*
  570. X
  571. XCopyright (C) 1988, 1989 by Juha Takala, jta@sah.vtt.fi
  572. X
  573. X     This program is free software; you can redistribute it and/or modify
  574. X     it under the terms of the GNU General Public License as published by
  575. X     the Free Software Foundation; version 1.
  576. X
  577. X     This program is distributed in the hope that it will be useful,
  578. X     but WITHOUT ANY WARRANTY; without even the implied warranty of
  579. X     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  580. X     the file "License" for more details
  581. X
  582. X     You should have received a copy of the GNU General Public License
  583. X     along with this program; if not, write to the Free Software
  584. X     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  585. X
  586. X
  587. X */
  588. X
  589. X
  590. X/* $Id: dr_lib.h,v 2.3 89/12/08 14:00:31 jta Exp Locker: jta $
  591. X *
  592. X * This is header file for a subroutine package that contains
  593. X * device level routines to manipulate graphics devices such as
  594. X *  - hpgl output for hp7475 plotter
  595. X *  - gl_plot(3) calls for EGA or matrix printer output
  596. X *  - plot(3) interface
  597. X *
  598. X * Following routines are provided:
  599. X *
  600. X *
  601. X * void circle()
  602. X *    - draw a small circle at current point
  603. X *
  604. X * void dr_set_pen(n)
  605. X * int n;
  606. X *    - select pen n
  607. X *    - n==0 menas 'put it away'
  608. X *    - n = 1..6 means select pen n
  609. X *    - n<0 or n>6 issues error message and selects pen 1
  610. X *
  611. X * void dr_goto(x,y,linetype,penup,relative)
  612. X * float x, y; int linetype, penup;
  613. X *    - move pen to point (x,y)
  614. X *    - if penup!=0, will draw line of type linetype
  615. X *    - if relative!=0, will move relative to current point
  616. X *
  617. X * void dr_draw_line(x1, y1, x2, y2, linetype)
  618. X * float x1, y1, x2, y2; int linetype;
  619. X *    - draw a line of type linetype from poin (x1,y1) to point (x2,y2)
  620. X *
  621. X * void dr_set_shape(x)
  622. X * float x;
  623. X *    - change text 'fatness'
  624. X * 
  625. X * void dr_set_size(x)
  626. X * float x;
  627. X *    - change text size
  628. X * 
  629. X * void dr_draw_array(x, y, n, linetype)
  630. X * float x[], y[]; int n, linetype;
  631. X *    - points (x[i],y[i]) (i = 0..n-1) will be connected
  632. X *      with line of linetype
  633. X *
  634. X * void dr_put_mark(x, y, mark) 
  635. X * float x, y; char mark;
  636. X *    - put marker mark at point (x,y)
  637. X *
  638. X * void dr_put_text(xpos, ypos, xofs, yofs, dir, size, s)
  639. X * float xpos, ypos, xofs, yofs; char *dir, *size, *s;
  640. X *    - put text s to position (xpos+xofs,ypos+yofs) in direction dir
  641. X *
  642. X * int dr_finish()
  643. X *    - finish plotting, report errors, return number of them
  644. X *
  645. X * void dr_start(xlow, xhigh, ylow, yhigh, dev)
  646. X * float xlow, xhigh, ylow, yhigh; int dev;
  647. X *    - prepare plotting for device dev, establish relative drawing area
  648. X *
  649. X * void dr_xgrid(n)
  650. X * int n;
  651. X *    - draw vertical grid lines
  652. X *
  653. X * void dr_ygrid(n)
  654. X * int n;
  655. X *    - draw horizontal grid lines
  656. X *
  657. X * void dr_area_def(xlow, xincr, xhigh, ylow, yincr, yhigh, no_axes)
  658. X * float xlow, xincr, xhigh, ylow, yincr, yhigh;
  659. X * int no_axes;
  660. X *    - establish user coordinates
  661. X *    - draw x- and y-axis and tick marks (only if no_axes == 0)
  662. X *
  663. X * void dr_errmsg(s)
  664. X * char *s;
  665. X *    - send string s to error log file
  666. X */
  667. X
  668. Xint dr_set_ltype();
  669. Xvoid dr_goto(), dr_draw_line(), dr_draw_array(), dr_put_mark();
  670. Xvoid dr_set_pen(), dr_set_shape(), dr_set_size(), dr_put_text(), dr_set_cset();
  671. Xint dr_finish();
  672. Xvoid dr_start(), dr_area_def();
  673. Xvoid dr_xgrid(), dr_ygrid(), dr_draw_circle();
  674. Xvoid dr_errmsg(), dr_warnmsg();
  675. X
  676. X
  677. X/* The following devices are supported: */
  678. X#define HP7475 1        /* hp 7475 plotter */
  679. X#define SCREEN 2        /* ega == dtlewis's gl_plot */
  680. X#define PLOTLIB 3        /* UNIX plot(3) interface */
  681. X#define FIRSTDEV HP7475
  682. X#define LASTDEV PLOTLIB
  683. X#define INVDEV -1
  684. X#define DEVMASK 0xff
  685. X
  686. X/* the following are paper size coding */
  687. X#define SIZE_A4 0x100
  688. X#define SIZE_A3 0x200
  689. X#define SIZE_A  0x400
  690. X#define SIZE_B  0x800
  691. X#define SIZEMASK 0xff00
  692. X
  693. X#ifdef PLOT
  694. Xextern void openpl();
  695. Xextern void erase();
  696. Xextern void label();
  697. Xextern void line();
  698. Xextern void circle();
  699. Xextern void arc();
  700. Xextern void move();
  701. Xextern void cont();
  702. Xextern void point();
  703. Xextern void linemod();
  704. Xextern void space();
  705. Xextern void closepl();
  706. X#endif
  707. X
  708. X#ifdef MSDOS
  709. X#define M_PI_2 1.5707963268
  710. X#endif
  711. END_OF_FILE
  712. if test 4029 -ne `wc -c <'dr_lib.h'`; then
  713.     echo shar: \"'dr_lib.h'\" unpacked with wrong size!
  714. fi
  715. # end of 'dr_lib.h'
  716. fi
  717. if test -f 'draw.1' -a "${1}" != "-c" ; then 
  718.   echo shar: Will not clobber existing file \"'draw.1'\"
  719. else
  720. echo shar: Extracting \"'draw.1'\" \(14856 characters\)
  721. sed "s/^X//" >'draw.1' <<'END_OF_FILE'
  722. X.\" dummy line
  723. X' $Id: draw.1,v 2.4 89/12/11 09:25:12 jta Exp $
  724. X.TH DRAW 1L "" "Graphics utilities"
  725. X.UC 4
  726. X.SH NAME
  727. Xdraw
  728. X\- Yet another line- etc. drawing utility.
  729. X.SH SYNOPSIS
  730. X\fBdraw\fP [\fIoptions\fP] [\fIfiles\fP]
  731. X.SH DESCRIPTION
  732. XThe purpose of \fBdraw\fP is basically to read 
  733. X(\fIx,y\fP)
  734. Xcoordinates from user's data file(s) (or stdin) and produce a
  735. Xpolyline connecting those points on a graphic device.
  736. XCoordinate axes, labels for axes, etc. are made on user's request.
  737. X.PP
  738. XThe good thing about this program is, that it accepts infinite size input;
  739. Xdata is not stored inside program, but procecced immediately.
  740. X
  741. XThe output data should be sent to desired device.
  742. XThe input data stream is organised as lines of text.
  743. XThere are three kinds of input lines:
  744. X.RS 2
  745. X.IP \(bu 3
  746. XEmpty lines containing only white space, and comment lines
  747. Xstarting with `\fB#\fR'.
  748. XAdding or removing these has no effects on output.
  749. X.IP \(bu
  750. XPseudo comment lines (command lines); they look like
  751. X`\fB#$ \fIcommand arguments\fR'.
  752. XThese lines have effects on what is to be output, and thus what
  753. Xthe picture will look like.
  754. X.IP \(bu
  755. XOthers are taken to be data lines.
  756. XData line that does not have
  757. Xtwo floating point numbers (generally) at beginning, is invalid
  758. Xand will be discarded, and error message will be generated.
  759. XRest
  760. Xof the line is not used, so it may contain any text.
  761. X(See also \fB-f\fP)
  762. X.RE
  763. X.PP
  764. XCurrently supported devices are (see \fB-t\fR):
  765. X.RS 2
  766. X.IP \(bu 3
  767. XHP7475 plotter.  Using this you get the HPGL code to stdout.
  768. XUse redirection to lp(1), /dev/tty00 or whatever you like.
  769. X.IP \(bu
  770. XEGA & friends.
  771. XThis is implemented by using \fIgl_plot\fR(3)
  772. Xlibrary calls, and so you can get the picture to whatever device
  773. Xthat library can handle.  The library has been posted in 
  774. Xcomp.sources.unix and is made by D. T. Lewis.  Existence of this device
  775. Xdepends of compile-time option, and may not be present at your
  776. Xsystem, contact the person who did the installation at your site.
  777. X
  778. X.IP \(bu
  779. XStandard *NIX \fIplot\fP(3) output (\fBdraw\fP versions 2.x and later).
  780. XThis produces device independent stuff to stdout, so you may want to filter
  781. Xit futher with \fItplot\fP(1) into suitable form for your graphics
  782. Xdevice. 
  783. X.RE
  784. X.PP
  785. X\fBdraw\f may give some error and warning messages during its run.
  786. XDuring the plotting, the messages are collected into a log file named
  787. X\fIdraw.err\fP 
  788. Xto be viewed after the run, because stdout and stderr might be the same
  789. Xdevice (as in the case of a T-connected plotter).  After the run, the
  790. Xnumber of errors and warnings is reported, if non-zero, or the log-file
  791. Xis removed.
  792. X.PP
  793. XFatal errors cause immediate termination of program.  They are 
  794. Xgenerated by invalid device or range specifications and such.
  795. XNon-fatal errors are generated, when invalid pseudo comments are
  796. Xfound, invalid data lines are found, or data points fall
  797. Xoutside device hard limits.  Warnings are generated, when data
  798. Xpoints fall outside user coordinate ranges.
  799. X.PP
  800. XExit status is 1 if errors were detected, 2 if nothing was done,
  801. Xand 0 otherwise (warnings are possible in this case).
  802. X.SS Controlling the job
  803. X.PP
  804. XYou can change the way of drawing with 
  805. X.B command line options
  806. Xor
  807. X.B pseudo comments
  808. Xor both.
  809. XThere are options to set plotting area on device, axis
  810. Xranges, label texts, name for the picture, etc.
  811. X.PP
  812. XAll command line options must be given before any
  813. Xfilenames, they are parsed by \fIgetopt\fR(3).
  814. X.PP
  815. XMost pseudo comments need arguments.
  816. XTextual arguments contunue till the end of line.
  817. XArguments are separated form the command by
  818. Xat least one whitespace character, and from each other by exactly
  819. Xone `\fB,\fR' (comma).
  820. X.PP
  821. XMost pseudo comments remember the pen position (thinking of plotter
  822. Xoutput), so you can easily put some 
  823. Xexplanatory text into your picture at any moment without
  824. Xmaking a break in the figure to be drawn.
  825. X.PP
  826. XIn the following both the command line options and pseudo comments, that
  827. Xhave same effect, 
  828. Xare described in parallel, because there are both ways available
  829. Xto do most things. 
  830. X.PP
  831. X.B #$absolute
  832. X.I \fR[\fPx_origin,y_origin\fR]\fP
  833. X.br
  834. X.B #$endabsolute
  835. X.RS
  836. XAfter the \fB#$absolute\fP command, following input data pairs, until
  837. Xthe \fB#$endabsolute\fP command, are converted as follows:  each \fIx\fP
  838. Xvalue is added to \fIx_origin\fP, and the resulting number is scaled so
  839. Xthat 0.0 corresponds to \fIxlow\fP and 1.0 corresponds to \fIxhigh\fP
  840. X(see \fB-x\fP and \fB#$xrange\fP).  Similar conversion
  841. Xapplies to \fIy\fP-values.  Default values for \fIx_origin\fP and
  842. X\fIy_origin\fP are 0.0, if they are missing (or invalid, in which case
  843. Xno error is reported!).
  844. X
  845. XThis feature is supposed to be useful with the \fB#$include\fP command,
  846. Xso that some constant data,  eg. logos or such, may be inserted into
  847. Xpictures.  Note, however, that changing the ratio of \fIx\fP and \fIy\fP
  848. Xdirection's relative drawing areas (see \fB-a\fP and \fB#$area\fP) will
  849. Xaffect the shape!
  850. X.RE
  851. X.PP
  852. X.B -a
  853. X.I x1,y1,x2,y2
  854. X.br
  855. X.B #$area
  856. X.I x1,y1,x2,y2
  857. X.RS
  858. XCan be used to specify plotting area on device, when several
  859. Xpictures are to be plotted on one paper sheet.
  860. X.I x1,y1
  861. Xwill specify lower left corner and
  862. X.I x2,y2
  863. Xwill specify upper right corner.  Enough
  864. Xmarginal area is automatically reserved for axis labels and picture
  865. Xname texts.
  866. XDefault is 0,0,1,1 to use whole device area.  Pseudo command may
  867. Xtake effect only if command line option has not been specified,
  868. Xand must be given before device initialization (see \fB#$init\fR) has
  869. Xtaken place, otherwise the default will be used.
  870. X.RE
  871. X.PP
  872. X.B -b
  873. X.br
  874. X.B #$noaxes
  875. X.RS
  876. XDisables the drawing of coordinate axes, labels, name etc.
  877. XOnly
  878. Xthe data points (and commands inside data) will produce somthing
  879. Xvisible on device.
  880. XTo take effect, this must be specified before
  881. Xdevice initialization (see \fB#$init\fR) is done.
  882. X.RE
  883. X.PP
  884. X.B -c
  885. X.I n
  886. X.br
  887. X.B #$cset
  888. X.I n
  889. X.RS
  890. XSpecifies character set \fIn\fP to be used.  Meaning of \fIn\fP
  891. Xis the same as for HP7475.
  892. XPseudo comment can be used many times in the data to mix different
  893. Xcharacter sets.  
  894. XChanging character set does not affect pen's position or up/down status.
  895. XInitial value is 0 for US Ascii character set.
  896. X\fB#$cset\fP will force device initialization.
  897. X\fBNote:\fP all devices are not capable to support this.  In those cases
  898. Xthis command is ignored.
  899. X.RE
  900. X.PP
  901. X.B -d
  902. X.br
  903. X.BR #$date | #$time
  904. X.RS
  905. XAsks \fBdraw\fP to output current date (or date and time) in upper right
  906. Xcorner of the picture.
  907. XGiven \fB-dd\fP or \fB -d -d \fP on command line is equvalent to
  908. X\fB#$time\fP, and  causes also current time to be output.
  909. X.RE
  910. X.PP
  911. X.B #$direction
  912. X.I angle
  913. X.RS
  914. XSpecify \fIangle\fP (radians) to be the direction, where text will be
  915. Xwritten form now on.
  916. XInitial value is 0.0 (left to right, parallel to x-axis).  
  917. XPositive values go counterclockwise.
  918. XWorks in funny way with device \fB-tplot\fP: letters are not re-oriented,
  919. Xbut lines of text run in desired \fIangle\fP.
  920. X.RE
  921. X.PP
  922. X.B -f
  923. X.I n1,n2
  924. X.RS
  925. XChanges the format of input.
  926. XUsually the two first columns are
  927. Xconsidered on each line, and the order is so that first column is
  928. Xvalue for \fIx\fP, and second column is value for \fIy\fP.
  929. XThis option tells \fBdraw\fP that value for \fIx\fP should be taken from
  930. Xcolumn \fIn1\fP, and \fIy\fP should be taken from column \fIn2\fP.
  931. XGiving \fB-f 2\,1\fP effectively reverses the variables.
  932. XPseudo comment version is not available.
  933. X.RE
  934. X.PP
  935. X.B -g
  936. X.I nx,ny
  937. X.br
  938. X.B #$grid
  939. X.I nx,ny
  940. X.RS
  941. XSpecify how grid lines should be drawn.
  942. XIf this option is not
  943. Xgiven, no grid lines are drawn.
  944. X.IR nx " applies to " x- "grid lines (parallel to "
  945. X.IR y- "axis), and " ny " applies to " y- "grid"
  946. Xlines, both should be (small) non-negative integers.
  947. XUsing 1 for either \fIn\fP will produce grid lines at every
  948. X\fIincr\fP positions (see options \fB-x\fP and \fB-y\fP).
  949. XUsing 2 will double the grid line density etc.
  950. XSpecifying 0 for either direction will produce no grid lines for that
  951. Xdirection.
  952. X.RE
  953. X.PP
  954. X.B -h
  955. X.RS
  956. XGives short description of available command line options and
  957. Xexits.
  958. X.RE
  959. X.PP
  960. X.B #$include
  961. X.I file
  962. X.RS
  963. XCauses \fBdraw\fP to take temporarily input from file \fIfile.\fP
  964. XAfter that file is done, input resumes from current file.  Nesting is
  965. Xallowed, ie. included files may include other files.
  966. X.RE
  967. X.PP
  968. X.B #$init
  969. X.RS
  970. XForces internal and device dependant initialization with current
  971. Xvalues.  This is not necessary, 
  972. Xbecause the initializations are done automatically by the time
  973. Xwhen first data point is to be processed.
  974. XInternal initializations include following things:
  975. X.RS 2
  976. X.IP 0) 4
  977. XMemory allocation for raster buffers, mode switching into graphic
  978. Xmode and ioctls to map EGA-memory into user-space, if appropriate.
  979. X.IP 1)
  980. XFix internal translation between user coordinate system and device
  981. Xcoordinate system.
  982. XUser coordinate system is defined by
  983. X.IR xlow,xhigh " and " ylow,yhigh
  984. Xwhich are taken from
  985. X.BR -x " and " -y
  986. Xcommand line options' arguments, or, if they were not given, from
  987. X.BR #$xrange " and " #$yrange
  988. Xpseudo comments' arguments, or if they have not been found (at the
  989. Xmoment), default values are used.
  990. XDevice coordinate system is device dependent.
  991. X.IP 2)
  992. XDraw coordinate axes and units, if allowed.
  993. X.IP 3)
  994. XDraw grid lines if requested.
  995. X.IP 4)
  996. XPrint labels for axes, if specified.
  997. X.IP 5)
  998. XPrint name for the picture, if specified.
  999. X.IP 6)
  1000. XPrint current date (and time), if requested.
  1001. X.RE
  1002. X.PP
  1003. XSteps 4).. may be done also at later time, but only if no
  1004. Xspecification is available at the time of initialization.
  1005. XIn any
  1006. Xcase it is checked that each of these step is made at most once.
  1007. X.RE
  1008. X.PP
  1009. X.B -l
  1010. X.I n
  1011. X.br
  1012. X.B #$ltype
  1013. X.I n
  1014. X.RS
  1015. XChoose line type \fIn\fP to be used.  The meaning for \fIn\fP is the
  1016. Xsame as in HPGL, but 7 is for continous line (initial value).
  1017. X\fB#$ltype\fP will force device initialization.
  1018. X\fBNote:\fP all devices are not capable to support this.  In those cases
  1019. Xthis command is ignored.
  1020. X.PP
  1021. X.RE
  1022. X.PP
  1023. X.B -m
  1024. X.I c
  1025. X.br
  1026. X.B #$mark
  1027. X.I c
  1028. X.RS
  1029. XChoose character \fIc\fP
  1030. Xto be used as marker at each data point, no line will be drawn to
  1031. Xconnect them.  This is a way to get a "scattergram" of your
  1032. Xobservations.  Pseudocomment may also specify no 
  1033. Xmarker at all (just say \fB#$mark\fR).
  1034. XThat will tell \fBdraw\fP to start drawing continuous lines again, using
  1035. Xcurrent line type. 
  1036. XMarker may be changed as many times as desired, and the effect is
  1037. Ximmediate from next data point on, until next change.
  1038. X.RE
  1039. X.PP
  1040. X.B -n
  1041. X.I nametext
  1042. X.br
  1043. X.B #$name
  1044. X.I nametext
  1045. X.RS
  1046. XCauses \fInametext\fP to be output on top of the picture.
  1047. XThe text is centered and character size is twice the default size.
  1048. XName may be specified only once, so if command line has specified one,
  1049. Xpseudo comment has no effect.
  1050. X.RE
  1051. X.PP
  1052. X.B -p
  1053. X.I n
  1054. X.br
  1055. X.B #$pen
  1056. X.I num
  1057. X.RS
  1058. XChoose pen number \fIn\fP to be used, default is 1.
  1059. XHP7475 has room for 6 pens, and EGA has not implemented this yet
  1060. X(makes white), but.. "coming real soon now".  \fIplot\fP(3) does not
  1061. Xhave any colors.  Pen status (up/down) does not change.
  1062. X\fB#$pen\fP will force device initialization.
  1063. X.RE
  1064. X.PP
  1065. X.B #$penup
  1066. X.RS
  1067. XLift pen up.  Pen will go automatically down after next data point.
  1068. XThis makes it possible to draw more than one line into one picture:
  1069. XAt the point, where one line should end, just put command
  1070. X`\fB#$penup\fR' and continue with the data for next line.
  1071. XIt might also be wise to put `\fB#$ltype \fInum\fR' and/or
  1072. X`\fB#$pen \fInum\fR' to make some visible difference for those
  1073. Xlines.
  1074. X.RE
  1075. X.PP
  1076. X.B -S
  1077. X.I factor
  1078. X.br
  1079. X.B #$shape 
  1080. X.I factor
  1081. X.RS
  1082. XChange character fatness.  \fIfactor\fP
  1083. Xshould be a floating point number and not far from 1.0 to get
  1084. Xreasonable looking characters.  See also \fB#$size\fR.  Does not work
  1085. Xwith device \fB-tplot\fP.  \fBNote:\fP Relative plotting area's ratio in
  1086. X\fIx\fP and \fIy\fP directions also affects the character's shape (see
  1087. X\fB#$size\fP).
  1088. X.RE
  1089. X.PP
  1090. X.B -s
  1091. X.I factor
  1092. X.br
  1093. X.B #$size
  1094. X.I factor
  1095. X.RS
  1096. XChange character's size.  Actual character dimensions for HP7475
  1097. Xare:
  1098. X.RS 3
  1099. X\fIheight = size*\fR(1.5/100)\fI*yrelarea\fR
  1100. X.br
  1101. X\fIwidth = size*\fR(0.75/100)\fI*shape_factor*xrelarea,\fR
  1102. X.RE
  1103. Xwhere \fIxrelarea\fR and \fIyrelarea\fR are calculated from
  1104. X\fB-a\fR's or \fB#$area\fR's arguments.  Work in a funny way
  1105. Xwith device \fB-tplot\fP:  charater size does not change, but there
  1106. Xdistance from each other (in plotted strings) does.
  1107. X.RE
  1108. X.PP
  1109. X.B -t
  1110. X.I device
  1111. X.RS
  1112. XChoose \fIdevice\fP as the target.  Possible \fIdevice\fPs are:
  1113. X.BR a4 ", " a3 ", " a " and "
  1114. X.B b
  1115. Xto specify that size paper for HP7475 plotter and \fBega\fP
  1116. Xfor EGA & friends (\fIgl_plot\fR(3) library calls).
  1117. XVersions 2.x and later have standard *NIX \fIplot\fP(3) interface
  1118. Xavailable with \fIdevice\fP \fBplot\fP.
  1119. XIf no device is specified, environment variable \fBDRAWDEV\fP
  1120. Xwill be checked, and that value is used.  If no value is found,
  1121. X\fBdraw\fP will use a default value (\fBa4\fR).
  1122. XRefer \fIgl_plot\fR(3) to find its ways to determine its output devices
  1123. X(resolution and such).
  1124. X.RE
  1125. X.PP
  1126. X.B #$text 
  1127. X.I x,y,sometext
  1128. X.RS
  1129. XOutput the text \fIsometext\fP into picture so that it starts at
  1130. Xposition \fI(x,y)\fP.  The text is made using current settings of
  1131. X.BR #$direction ", " #$size ", "
  1132. X.BR #$shape " and " #$cset ". "
  1133. XThis is the command to put explanatary text into the picture.
  1134. XEach line must be positioned separately.  See also 
  1135. X.BR #$alabel " and " #$rlabel .
  1136. XThis will force device initialization.
  1137. X.RE
  1138. X.PP
  1139. X.BR #$alabel | #$rlabel
  1140. X.I x,y,sometext
  1141. X.RS
  1142. XOutput the text \fIsometext\fP
  1143. Xinto picture so that it starts at position \fIx,y\fR (with
  1144. X\fB#$alabel\fR), and at offset \fIx,y\fR from current position
  1145. X(with \fB#$rlabel\fR).
  1146. XThe text is made using current settings of
  1147. X.BR #$direction ", " #$size ", "
  1148. X.BR #$shape " and " #$cset ".
  1149. X.PP
  1150. XAfter the text is made, a solid line is drawn below it, and the
  1151. Xline's left end is connected to the point where last data point
  1152. Xwas.  There is also made a tiny circle.  The purpose of all this
  1153. Xis to provide a way to put labels to individual lines on a picture
  1154. Xwith more than one line.
  1155. XThese will force device initialization.
  1156. X.RE
  1157. X.PP
  1158. X.B -v
  1159. X.RS
  1160. XPrints version number on stderr and exits.
  1161. X.RE
  1162. X.PP
  1163. X.BR -x | -y
  1164. X.I low,incr,high
  1165. X.br
  1166. X.BR #$xrange | #$yrange
  1167. X.I low,incr,high
  1168. X.RS
  1169. XDefines user coordinate system to be used.
  1170. XAll data points to be
  1171. Xdrawn are given using these user coordinates.
  1172. X.I low
  1173. Xand 
  1174. X.I high
  1175. Xvalues define the range of observations that will fall in the
  1176. Xpicture area.
  1177. XThese values are also output below the axis's heads.
  1178. X.I incr
  1179. Xdefines, how often to output additional numbers below axes.
  1180. XIf no
  1181. Xuser coordinates are specified,
  1182. X.B draw
  1183. Xwill use default ranges
  1184. X.I -1,1,1
  1185. Xfor both directions.
  1186. XSee also option \fB-g\fP for grid lines.
  1187. X.RE
  1188. X.PP
  1189. X.BR -X | -Y
  1190. X.I axistext
  1191. X.br
  1192. X.BR #$xlabel | #$ylabel
  1193. X.I axistext
  1194. X.RS
  1195. XSpecify
  1196. X.I axistext
  1197. Xto be output at the high end of the axis.
  1198. XThe text is output in
  1199. Xsize of 1.4 times the default size.
  1200. XNo axis texts are made by
  1201. Xdefault.
  1202. X.RE
  1203. X.PP
  1204. X.SH BUGS
  1205. XCertaily.
  1206. XTell me when you find.
  1207. X.PP
  1208. X.SH SEE ALSO
  1209. Xplot(3), gl_plot(3), HP7475 Programmers manual.
  1210. X.PP
  1211. X.SH AUTHOR
  1212. XJuha Takala
  1213. X.br
  1214. Xjta@sah.vtt.fi
  1215. END_OF_FILE
  1216. if test 14856 -ne `wc -c <'draw.1'`; then
  1217.     echo shar: \"'draw.1'\" unpacked with wrong size!
  1218. fi
  1219. # end of 'draw.1'
  1220. fi
  1221. if test -f 'getopt.c' -a "${1}" != "-c" ; then 
  1222.   echo shar: Will not clobber existing file \"'getopt.c'\"
  1223. else
  1224. echo shar: Extracting \"'getopt.c'\" \(2467 characters\)
  1225. sed "s/^X//" >'getopt.c' <<'END_OF_FILE'
  1226. X/*
  1227. X**    @(#)getopt.c    2.2 (smail) 1/26/87
  1228. X*/
  1229. X
  1230. X/*
  1231. X * Here's something you've all been waiting for:  the AT&T public domain
  1232. X * source for getopt(3).  It is the code which was given out at the 1985
  1233. X * UNIFORUM conference in Dallas.  I obtained it by electronic mail
  1234. X * directly from AT&T.  The people there assure me that it is indeed
  1235. X * in the public domain.
  1236. X * 
  1237. X * There is no manual page.  That is because the one they gave out at
  1238. X * UNIFORUM was slightly different from the current System V Release 2
  1239. X * manual page.  The difference apparently involved a note about the
  1240. X * famous rules 5 and 6, recommending using white space between an option
  1241. X * and its first argument, and not grouping options that have arguments.
  1242. X * Getopt itself is currently lenient about both of these things White
  1243. X * space is allowed, but not mandatory, and the last option in a group can
  1244. X * have an argument.  That particular version of the man page evidently
  1245. X * has no official existence, and my source at AT&T did not send a copy.
  1246. X * The current SVR2 man page reflects the actual behavor of this getopt.
  1247. X * However, I am not about to post a copy of anything licensed by AT&T.
  1248. X */
  1249. X
  1250. X/* #define BSD */
  1251. X#ifdef BSD
  1252. X#include <strings.h>
  1253. X#else
  1254. X#define index(x,y) strchr((x),(y))
  1255. X#include <string.h>
  1256. X#endif
  1257. X
  1258. X/*LINTLIBRARY*/
  1259. X#define NULL    0
  1260. X#define EOF    (-1)
  1261. X#define ERR(s, c)    if(opterr){\
  1262. X    extern int write();\
  1263. X    char errbuf[2];\
  1264. X    errbuf[0] = c; errbuf[1] = '\n';\
  1265. X    (void) write(2, argv[0], (unsigned)strlen(argv[0]));\
  1266. X    (void) write(2, s, (unsigned)strlen(s));\
  1267. X    (void) write(2, errbuf, 2);}
  1268. X
  1269. X
  1270. Xint    opterr = 1;
  1271. Xint    optind = 1;
  1272. Xint    optopt;
  1273. Xchar    *optarg;
  1274. X
  1275. Xint
  1276. Xgetopt(argc, argv, opts)
  1277. Xint    argc;
  1278. Xchar    **argv, *opts;
  1279. X{
  1280. X    static int sp = 1;
  1281. X    register int c;
  1282. X    register char *cp;
  1283. X
  1284. X    if(sp == 1)
  1285. X        if(optind >= argc ||
  1286. X           argv[optind][0] != '-' || argv[optind][1] == '\0')
  1287. X            return(EOF);
  1288. X        else if(strcmp(argv[optind], "--") == NULL) {
  1289. X            optind++;
  1290. X            return(EOF);
  1291. X        }
  1292. X    optopt = c = argv[optind][sp];
  1293. X    if(c == ':' || (cp=index(opts, c)) == NULL) {
  1294. X        ERR(": illegal option -- ", c);
  1295. X        if(argv[optind][++sp] == '\0') {
  1296. X            optind++;
  1297. X            sp = 1;
  1298. X        }
  1299. X        return('?');
  1300. X    }
  1301. X    if(*++cp == ':') {
  1302. X        if(argv[optind][sp+1] != '\0')
  1303. X            optarg = &argv[optind++][sp+1];
  1304. X        else if(++optind >= argc) {
  1305. X            ERR(": option requires an argument -- ", c);
  1306. X            sp = 1;
  1307. X            return('?');
  1308. X        } else
  1309. X            optarg = argv[optind++];
  1310. X        sp = 1;
  1311. X    } else {
  1312. X        if(argv[optind][++sp] == '\0') {
  1313. X            sp = 1;
  1314. X            optind++;
  1315. X        }
  1316. X        optarg = NULL;
  1317. X    }
  1318. X    return(c);
  1319. X}
  1320. END_OF_FILE
  1321. if test 2467 -ne `wc -c <'getopt.c'`; then
  1322.     echo shar: \"'getopt.c'\" unpacked with wrong size!
  1323. fi
  1324. # end of 'getopt.c'
  1325. fi
  1326. if test -f 'getopt.l3' -a "${1}" != "-c" ; then 
  1327.   echo shar: Will not clobber existing file \"'getopt.l3'\"
  1328. else
  1329. echo shar: Extracting \"'getopt.l3'\" \(2755 characters\)
  1330. sed "s/^X//" >'getopt.l3' <<'END_OF_FILE'
  1331. X.TH GETOPT 3 local
  1332. X.DA 25 March 1982
  1333. X.SH NAME
  1334. Xgetopt \- get option letter from argv
  1335. X.SH SYNOPSIS
  1336. X.ft B
  1337. Xint getopt(argc, argv, optstring)
  1338. X.br
  1339. Xint argc;
  1340. X.br
  1341. Xchar **argv;
  1342. X.br
  1343. Xchar *optstring;
  1344. X.sp
  1345. Xextern char *optarg;
  1346. X.br
  1347. Xextern int optind;
  1348. X.ft
  1349. X.SH DESCRIPTION
  1350. X.I Getopt
  1351. Xreturns the next option letter in
  1352. X.I argv
  1353. Xthat matches a letter in
  1354. X.IR optstring .
  1355. X.I Optstring
  1356. Xis a string of recognized option letters;
  1357. Xif a letter is followed by a colon, the option is expected to have
  1358. Xan argument that may or may not be separated from it by white space.
  1359. X.I Optarg
  1360. Xis set to point to the start of the option argument on return from
  1361. X.IR getopt .
  1362. X.PP
  1363. X.I Getopt
  1364. Xplaces in
  1365. X.I optind
  1366. Xthe
  1367. X.I argv
  1368. Xindex of the next argument to be processed.
  1369. XBecause
  1370. X.I optind
  1371. Xis external, it is normally initialized to zero automatically
  1372. Xbefore the first call to 
  1373. X.IR getopt .
  1374. X.PP
  1375. XWhen all options have been processed (i.e., up to the first
  1376. Xnon-option argument),
  1377. X.I getopt
  1378. Xreturns
  1379. X.BR EOF .
  1380. XThe special option
  1381. X.B \-\-
  1382. Xmay be used to delimit the end of the options;
  1383. X.B EOF
  1384. Xwill be returned, and
  1385. X.B \-\-
  1386. Xwill be skipped.
  1387. X.SH SEE ALSO
  1388. Xgetopt(1)
  1389. X.SH DIAGNOSTICS
  1390. X.I Getopt
  1391. Xprints an error message on
  1392. X.I stderr
  1393. Xand returns a question mark
  1394. X.RB ( ? )
  1395. Xwhen it encounters an option letter not included in
  1396. X.IR optstring .
  1397. X.SH EXAMPLE
  1398. XThe following code fragment shows how one might process the arguments
  1399. Xfor a command that can take the mutually exclusive options
  1400. X.B a
  1401. Xand
  1402. X.BR b ,
  1403. Xand the options
  1404. X.B f
  1405. Xand
  1406. X.BR o ,
  1407. Xboth of which require arguments:
  1408. X.PP
  1409. X.RS
  1410. X.nf
  1411. Xmain(argc, argv)
  1412. Xint argc;
  1413. Xchar **argv;
  1414. X{
  1415. X    int c;
  1416. X    extern int optind;
  1417. X    extern char *optarg;
  1418. X    \&.
  1419. X    \&.
  1420. X    \&.
  1421. X    while ((c = getopt(argc, argv, "abf:o:")) != EOF)
  1422. X        switch (c) {
  1423. X        case 'a':
  1424. X            if (bflg)
  1425. X                errflg++;
  1426. X            else
  1427. X                aflg++;
  1428. X            break;
  1429. X        case 'b':
  1430. X            if (aflg)
  1431. X                errflg++;
  1432. X            else
  1433. X                bproc();
  1434. X            break;
  1435. X        case 'f':
  1436. X            ifile = optarg;
  1437. X            break;
  1438. X        case 'o':
  1439. X            ofile = optarg;
  1440. X            break;
  1441. X        case '?':
  1442. X        default:
  1443. X            errflg++;
  1444. X            break;
  1445. X        }
  1446. X    if (errflg) {
  1447. X        fprintf(stderr, "Usage: ...");
  1448. X        exit(2);
  1449. X    }
  1450. X    for (; optind < argc; optind++) {
  1451. X        \&.
  1452. X        \&.
  1453. X        \&.
  1454. X    }
  1455. X    \&.
  1456. X    \&.
  1457. X    \&.
  1458. X}
  1459. X.RE
  1460. X.PP
  1461. XA template similar to this can be found in
  1462. X.IR /usr/pub/template.c .
  1463. X.SH HISTORY
  1464. XWritten by Henry Spencer, working from a Bell Labs manual page.
  1465. XBehavior believed identical to the Bell version.
  1466. X.SH BUGS
  1467. XIt is not obvious how
  1468. X`\-'
  1469. Xstanding alone should be treated;  this version treats it as
  1470. Xa non-option argument, which is not always right.
  1471. X.PP
  1472. XOption arguments are allowed to begin with `\-';
  1473. Xthis is reasonable but reduces the amount of error checking possible.
  1474. X.PP
  1475. X.I Getopt
  1476. Xis quite flexible but the obvious price must be paid:  there is much
  1477. Xit could do that it doesn't, like
  1478. Xchecking mutually exclusive options, checking type of
  1479. Xoption arguments, etc.
  1480. END_OF_FILE
  1481. if test 2755 -ne `wc -c <'getopt.l3'`; then
  1482.     echo shar: \"'getopt.l3'\" unpacked with wrong size!
  1483. fi
  1484. # end of 'getopt.l3'
  1485. fi
  1486. if test -f 'kiero.c' -a "${1}" != "-c" ; then 
  1487.   echo shar: Will not clobber existing file \"'kiero.c'\"
  1488. else
  1489. echo shar: Extracting \"'kiero.c'\" \(1898 characters\)
  1490. sed "s/^X//" >'kiero.c' <<'END_OF_FILE'
  1491. X/*
  1492. X
  1493. XCopyright (C) 1988, 1989 by Juha Takala, jta@sah.vtt.fi
  1494. X
  1495. X     This program is free software; you can redistribute it and/or modify
  1496. X     it under the terms of the GNU General Public License as published by
  1497. X     the Free Software Foundation; version 1.
  1498. X
  1499. X     This program is distributed in the hope that it will be useful,
  1500. X     but WITHOUT ANY WARRANTY; without even the implied warranty of
  1501. X     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1502. X     the file "License for more details
  1503. X
  1504. X     You should have received a copy of the GNU General Public License
  1505. X     along with this program; if not, write to the Free Software
  1506. X     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1507. X
  1508. X
  1509. X */
  1510. X
  1511. X/* Description:
  1512. X * Screwed demo to tie your cpu for a while.  Pipe the output of this
  1513. X * program to the "draw" that you just made, and "draw"'s output to the
  1514. X * device you like.
  1515. X */
  1516. X
  1517. X#include <math.h>
  1518. X#include <stdio.h>
  1519. X
  1520. Xstatic char *rcsid =
  1521. X  "$Id: kiero.c,v 1.3 89/12/08 14:00:54 jta Exp Locker: jta $";
  1522. X
  1523. Xdouble param[8] = {0.99, -0.7, 3.01, 1.01, 0.1, 15.03, 0.01};
  1524. Xstatic char *ttbl[] = {
  1525. X    "#$xrange -2,1,2",
  1526. X    "#$yrange -2,1,2",
  1527. X    "#$noaxes",
  1528. X    "#$init",
  1529. X    "#$size 2",
  1530. X    "#$text -2,1.9,See: Computer Recreations",
  1531. X    "#$text -2,1.7,Scientific American, May -88, p.95",
  1532. X    "#$size 1.4",
  1533. X    "#$text -2,-1.75,Hit your interrupt character to stop.",
  1534. X    NULL
  1535. X};
  1536. X
  1537. Xint maxn = 100000;
  1538. X
  1539. Xmain (argc, argv, envp)
  1540. Xint argc;
  1541. Xchar *argv[], *envp[];
  1542. X{
  1543. X    double t, *p;
  1544. X    char **cp;
  1545. X    int i;
  1546. X    
  1547. X    if (argc > 1) {
  1548. X    maxn = atoi(*(++argv));
  1549. X    argc--;
  1550. X    }
  1551. X    
  1552. X    p = param;
  1553. X    while (--argc > 0)
  1554. X      *(p++) = atof(*(++argv));
  1555. X
  1556. X    for (cp=ttbl; *cp; cp++)
  1557. X      printf ("%s\n", *cp);
  1558. X
  1559. X    t = 0.0;
  1560. X    for (i=0; i<maxn; i++) {
  1561. X    printf ("%8.4f %8.4f\n",
  1562. X        sin(param[0]*t) + param[1] * cos(param[2]*t),
  1563. X        cos(param[3]*t) + param[4] * sin(param[5]*t));
  1564. X    t += param[6];
  1565. X    }
  1566. X}
  1567. END_OF_FILE
  1568. if test 1898 -ne `wc -c <'kiero.c'`; then
  1569.     echo shar: \"'kiero.c'\" unpacked with wrong size!
  1570. fi
  1571. # end of 'kiero.c'
  1572. fi
  1573. if test -f 'koe' -a "${1}" != "-c" ; then 
  1574.   echo shar: Will not clobber existing file \"'koe'\"
  1575. else
  1576. echo shar: Extracting \"'koe'\" \(35 characters\)
  1577. sed "s/^X//" >'koe' <<'END_OF_FILE'
  1578. Xdraw -tplot koe.dat | tplot -T4014
  1579. END_OF_FILE
  1580. if test 35 -ne `wc -c <'koe'`; then
  1581.     echo shar: \"'koe'\" unpacked with wrong size!
  1582. fi
  1583. chmod +x 'koe'
  1584. # end of 'koe'
  1585. fi
  1586. if test -f 'koe.dat' -a "${1}" != "-c" ; then 
  1587.   echo shar: Will not clobber existing file \"'koe.dat'\"
  1588. else
  1589. echo shar: Extracting \"'koe.dat'\" \(360 characters\)
  1590. sed "s/^X//" >'koe.dat' <<'END_OF_FILE'
  1591. X# koe.dat   -- test data for draw.c
  1592. X# #$area 0,0,0.5,0.5
  1593. X#$xrange 0,0.1,1
  1594. X#$yrange 0,0.2,1
  1595. X# #$grid 2,1
  1596. X#$name Name: jyklTqg
  1597. X#$xlabel X: jyklTqg
  1598. X#$ylabel Y: jyklTqg
  1599. X#$date
  1600. X0.01    0.52
  1601. X0.21    0.63
  1602. X0.41    0.41
  1603. X#$alabel 0.53,0.77 label for data
  1604. X0.61    0.55
  1605. X0.81    0.45
  1606. X0.99    0.51
  1607. X#$include vttlogo
  1608. X#$mark X
  1609. X0.1    0.24
  1610. X0.3    0.37
  1611. X0.5    0.22
  1612. X0.61    0.55
  1613. X0.81    0.45
  1614. X0.99    0.51
  1615. X#
  1616. X# -eof-
  1617. END_OF_FILE
  1618. if test 360 -ne `wc -c <'koe.dat'`; then
  1619.     echo shar: \"'koe.dat'\" unpacked with wrong size!
  1620. fi
  1621. # end of 'koe.dat'
  1622. fi
  1623. if test -f 'makefile.dos' -a "${1}" != "-c" ; then 
  1624.   echo shar: Will not clobber existing file \"'makefile.dos'\"
  1625. else
  1626. echo shar: Extracting \"'makefile.dos'\" \(515 characters\)
  1627. sed "s/^X//" >'makefile.dos' <<'END_OF_FILE'
  1628. X#
  1629. X#
  1630. X# I don't know about Mosse-dos makes.  This makefile does not work with
  1631. X# Microsoft make (?).  Here is a bat file you can use to compile each .c
  1632. X# file into .obj, how about link ?
  1633. X#        cl -AL -FPa -Zi -c %1.c
  1634. X
  1635. XSRC    = draw.c hpp.c getopt.c
  1636. XOBJS    = draw.obj hpp.obj getopt.obj
  1637. X
  1638. Xdraw.exe:    $(OBJS)
  1639. X    link $(OBJS),,,;
  1640. X
  1641. Xall:    draw.exe
  1642. X
  1643. Xkoe:    draw.exe koe.dat
  1644. X    draw -dd -x 5,5,15 -y 0,10,30 -g 1,2 koe.dat >koe.pic
  1645. X
  1646. Xgetopt.obj:    getopt.c
  1647. X    cl -c $*.c
  1648. X
  1649. Xhpp.obj:    hpp.c hpp.h
  1650. X    cl -c $*.c
  1651. X
  1652. Xdraw.obj:    draw.c hpp.h
  1653. X    cl -c $*.c
  1654. END_OF_FILE
  1655. if test 515 -ne `wc -c <'makefile.dos'`; then
  1656.     echo shar: \"'makefile.dos'\" unpacked with wrong size!
  1657. fi
  1658. # end of 'makefile.dos'
  1659. fi
  1660. if test -f 'vttlogo' -a "${1}" != "-c" ; then 
  1661.   echo shar: Will not clobber existing file \"'vttlogo'\"
  1662. else
  1663. echo shar: Extracting \"'vttlogo'\" \(361 characters\)
  1664. sed "s/^X//" >'vttlogo' <<'END_OF_FILE'
  1665. X#$penup
  1666. X#$absolute 0.2,0.1
  1667. X# mutterin kuori
  1668. X0.012    0.05
  1669. X0.03    0.005
  1670. X0.07    0.005
  1671. X0.088    0.05
  1672. X0.07    0.095
  1673. X0.03    0.095
  1674. X0.012    0.05
  1675. X#$penup
  1676. X# V
  1677. X0.041    0.090
  1678. X0.050    0.055
  1679. X0.059    0.090
  1680. X#$penup
  1681. X# vasemmanpuoleinen T
  1682. X0.027    0.045
  1683. X0.045    0.045
  1684. X#$penup
  1685. X0.036    0.045
  1686. X0.036    0.010
  1687. X#$penup
  1688. X# oikeanpuoleinen T
  1689. X0.055    0.045
  1690. X0.073    0.045
  1691. X#$penup
  1692. X0.064    0.045
  1693. X0.064    0.010
  1694. X#$endabsolute
  1695. X#$penup
  1696. END_OF_FILE
  1697. if test 361 -ne `wc -c <'vttlogo'`; then
  1698.     echo shar: \"'vttlogo'\" unpacked with wrong size!
  1699. fi
  1700. # end of 'vttlogo'
  1701. fi
  1702. echo shar: End of archive 1 \(of 2\).
  1703. cp /dev/null ark1isdone
  1704. MISSING=""
  1705. for I in 1 2 ; do
  1706.     if test ! -f ark${I}isdone ; then
  1707.     MISSING="${MISSING} ${I}"
  1708.     fi
  1709. done
  1710. if test "${MISSING}" = "" ; then
  1711.     echo You have unpacked both archives.
  1712.     rm -f ark[1-9]isdone
  1713. else
  1714.     echo You still need to unpack the following archives:
  1715.     echo "        " ${MISSING}
  1716. fi
  1717. ##  End of shell archive.
  1718. exit 0
  1719.